From: Stéphane Démurget Date: Thu, 1 Nov 2012 16:07:48 +0000 (+0100) Subject: modalDialog: give more control over the layout X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~5394 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=c10e4c3117d9d855f8a66bc4447fff86e82c38ec;p=gnome-shell.git modalDialog: give more control over the layout Make the button layout public for callers to be able to have more control over like adding custom widgets. Also, the clearButtons and addButton methods are added as convenience for the most frequent usage. https://bugzilla.gnome.org/show_bug.cgi?id=687113 --- diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js index 04b007672..2ee2579e5 100644 --- a/js/ui/modalDialog.js +++ b/js/ui/modalDialog.js @@ -95,10 +95,10 @@ const ModalDialog = new Lang.Class({ x_align: St.Align.MIDDLE, y_align: St.Align.START }); - this._buttonLayout = new St.BoxLayout({ style_class: 'modal-dialog-button-box', + this.buttonLayout = new St.BoxLayout({ style_class: 'modal-dialog-button-box', visible: false, vertical: false }); - this.dialogLayout.add(this._buttonLayout, + this.dialogLayout.add(this.buttonLayout, { expand: true, x_align: St.Align.MIDDLE, y_align: St.Align.END }); @@ -117,31 +117,17 @@ const ModalDialog = new Lang.Class({ this._actionKeys[key] = action; }, - setButtons: function(buttons) { - this._buttonLayout.destroy_all_children(); + clearButtons: function() { + this.buttonLayout.destroy_all_children(); this._actionKeys = {}; + }, - this._buttonLayout.visible = (buttons.length > 0); + setButtons: function(buttons) { + this.clearButtons(); + this.buttonLayout.visible = (buttons.length > 0); for (let i = 0; i < buttons.length; i++) { let buttonInfo = buttons[i]; - let label = buttonInfo['label']; - let action = buttonInfo['action']; - let key = buttonInfo['key']; - let isDefault = buttonInfo['default']; - - if (isDefault && !key) { - this._actionKeys[Clutter.KEY_KP_Enter] = action; - this._actionKeys[Clutter.KEY_ISO_Enter] = action; - key = Clutter.KEY_Return; - } - - buttonInfo.button = new St.Button({ style_class: 'modal-dialog-button', - reactive: true, - can_focus: true, - label: label }); - if (isDefault) - buttonInfo.button.add_style_pseudo_class('default'); let x_alignment; if (buttons.length == 1) @@ -153,22 +139,46 @@ const ModalDialog = new Lang.Class({ else x_alignment = St.Align.MIDDLE; - if (!this._initialKeyFocusDestroyId) - this._initialKeyFocus = buttonInfo.button; - this._buttonLayout.add(buttonInfo.button, - { expand: true, - x_fill: false, - y_fill: false, - x_align: x_alignment, - y_align: St.Align.MIDDLE }); + let button = this.addButton(buttonInfo, { expand: true, + x_fill: false, + y_fill: false, + x_align: x_alignment, + y_align: St.Align.MIDDLE }); + buttonInfo.button = button; + } + }, - buttonInfo.button.connect('clicked', action); + addButton: function(buttonInfo, layoutInfo) { + let label = buttonInfo['label']; + let action = buttonInfo['action']; + let key = buttonInfo['key']; + let isDefault = buttonInfo['default']; - if (key) - this._actionKeys[key] = action; + if (isDefault && !key) { + this._actionKeys[Clutter.KEY_KP_Enter] = action; + this._actionKeys[Clutter.KEY_ISO_Enter] = action; + key = Clutter.KEY_Return; } - this.emit('buttons-set'); + let button = new St.Button({ style_class: 'modal-dialog-button', + reactive: true, + can_focus: true, + label: label }); + + button.connect('clicked', action); + + if (isDefault) + button.add_style_pseudo_class('default'); + + if (!this._initialKeyFocusDestroyId) + this._initialKeyFocus = button; + + if (key) + this._actionKeys[key] = action; + + this.buttonLayout.add(button, layoutInfo); + + return button; }, _onKeyReleaseEvent: function(object, event) {